package br.fatec.model.entity;

import java.sql.Timestamp;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ForeignKey;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;

@Entity
public class Embalagem {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(insertable = false, updatable = false)
	private Integer codigo;

	@Column(length = 200, nullable = false)
	private String nome;

	@Column(precision = 1000, scale = 4, nullable = false, columnDefinition = "Decimal(1000,4)")
	private Double capacidade;

	@Column(length = 200, nullable = false)
	private Tipo tipo;

	@Column(precision = 1000, scale = 2, nullable = false, columnDefinition = "Decimal(1000,2)")
	private Double valorUnitario;

	@OneToOne(fetch=FetchType.EAGER, cascade = CascadeType.REMOVE)
	@JoinColumn(foreignKey=@ForeignKey(name = "fk_embalagem_estoque"))
	private Estoque estoque;

	@Column(length = 2000, nullable = true)
	private String descricao;

	@ManyToOne
	@JoinColumn(nullable = false, updatable = false, foreignKey=@ForeignKey(name = "fk_embalagem_criadopor"))
	private Usuario criadoPor;

	@GeneratedValue
	@Column(nullable = false, columnDefinition = "timestamp default now()", insertable = false, updatable = false)
	private Timestamp criadoEm;

	@Column(nullable = false, columnDefinition = "boolean default true", insertable = false)
	private Boolean ativo;

	public Integer getCodigo() {
		return codigo;
	}

	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		if (nome != null)
			this.nome = nome.trim();
	}

	public Double getCapacidade() {
		return capacidade;
	}

	public void setCapacidade(Double capacidade) {
		this.capacidade = capacidade;
	}

	public Double getValorUnitario() {
		return valorUnitario;
	}

	public void setValorUnitario(Double valorUnitario) {
		this.valorUnitario = valorUnitario;
	}

	public Estoque getEstoque() {
		return estoque;
	}

	public void setEstoque(Estoque estoque) {
		this.estoque = estoque;
	}

	public Usuario getCriadoPor() {
		return criadoPor;
	}

	public void setCriadoPor(Usuario criadoPor) {
		this.criadoPor = criadoPor;
	}

	public Timestamp getCriadoEm() {
		return criadoEm;
	}

	public void setCriadoEm(Timestamp criadoEm) {
		this.criadoEm = criadoEm;
	}

	public Boolean getAtivo() {
		return ativo;
	}

	public void setAtivo(Boolean ativo) {
		this.ativo = ativo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		if (descricao != null)
			this.descricao = descricao.trim();
	}

	public Tipo getTipo() {
		return tipo;
	}

	public void setTipo(Tipo tipo) {
		this.tipo = tipo;
	}

	public enum Tipo {
		Frasco("Frasco"), Tampa("Tampa"), Bisnaga("Bisnaga"), Pote("Pote");

		private String nome;

		Tipo(String nome) {
			this.nome = nome;
		}

		@Override
		public String toString() {
			return nome;
		}
	}
}
